package ws

import (
	"fmt"
	"net/http"
	"svr/src/conf"
	"svr/src/eor"
	"svr/src/logs"
	"svr/src/msg"
	"svr/src/xutil"

	"github.com/gorilla/websocket"
)

func init() {
}

var UP = websocket.Upgrader{
	ReadBufferSize:  conf.ServerConfig.MsgReadBuf,
	WriteBufferSize: conf.ServerConfig.MsgWriteBuf,
	CheckOrigin: func(r *http.Request) bool {
		return true
	},
}

const epos_handlerFromDown = "handlerFromDown"

func handlerFromDown(w http.ResponseWriter, r *http.Request) {
	conn, err := UP.Upgrade(w, r, nil)
	logs.Debugf("--------conn  -------: %s", conn.RemoteAddr().String()) //RemoteAddr 远程客户端地址
	if err != nil {
		_ = eor.NewErr(msg.ErrCode_Err_Connected, epos_handlerFromDown, "1", err)
		return
	}
	/**       //!#dv
	dev, err := addAddrDeviceInfo(conn, true) //来自下级的链接
	if xutil.CheckErr(err) {
		return
	}
	/**/                          //!#dv
	dev := createDeviceInfo(conn) //来自下级的链接
	/**/
	defer func() {
		if dev != nil {
			dev.Close()
		}
	}()
	for {
		if dev.ReadMessage() != nil {
			break
		}
	}
	// log.Println("-------close-------server")
}

func StartSever() error {
	AddHeartUpdate()
	go updateAll()
	err := startListen(conf.ServerConfig.ListenPort) //阻塞，开启本地监听
	if xutil.CheckErr(err) {
		return err
	}
	return nil
}

func startListen(port int32) error {
	http.HandleFunc("/", handlerFromDown)
	logs.Debugf("--------- startListen-----port:%d", port)
	err := http.ListenAndServe(fmt.Sprintf(":%d", port), nil)
	logs.Debugf("--------- endListen-----port:%d", port)
	return err

}

// // 获得一个可用端口
// func getPort(startPort int32) int32 {
// 	for i := startPort; i < 65535; i++ {
// 		if checkPort(i) {
// 			return i
// 		}
// 	}
// 	for i := int32(1024); i < startPort; i++ {
// 		if checkPort(i) {
// 			return i
// 		}
// 	}
// 	return 0
// }

// func checkPort(port int32) bool {
// 	listener, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
// 	defer func() {
// 		if listener != nil {
// 			listener.Close()
// 		}
// 	}()
// 	if err != nil {
// 		return false
// 	}
// 	return true
// }

//	func test() {
//		fmt.Printf("--------1111111111----------")
//		err := startListen(conf.ServerConfig.ListenPort) //阻塞，开启本地监听
//		if xutil.CheckErr(err) {
//		}
//	}
